home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / tcl / xf2.3-p / xf2 / xf2.3 / src / xfedit.tcl < prev    next >
Encoding:
Text File  |  1993-11-20  |  28.6 KB  |  932 lines

  1. # Program: xf
  2. # Description: the main editing window
  3. #
  4. # $Header: xfedit.tcl[2.3] Wed Mar 10 12:05:44 1993 garfield@garfield frozen $
  5.  
  6. ##########
  7. # Procedure: XFEdit
  8. # Description: show main editing window
  9. # Arguments: none
  10. # Returns: none
  11. # Sideeffects: none
  12. ##########
  13. proc XFEdit {} {
  14.   global tkVersion
  15.   global xfBind
  16.   global xfConf
  17.   global xfFile
  18.   global xfPath
  19.   global xfStatus
  20.   global xfWrongName
  21.  
  22.   # build widget structure
  23.   XFTmpltToplevel .xfEdit 430x480 {XF}
  24.  
  25.   XFTmpltFrame .xfEdit.frame1
  26.  
  27.   XFTmpltFrame .xfEdit.frame10
  28.  
  29.   XFTmpltFrame .xfEdit.frame2 0
  30.  
  31.   XFTmpltFrame .xfEdit.frame3 0
  32.  
  33.   XFTmpltFrame .xfEdit.frame4 0
  34.   
  35.   XFTmpltFrame .xfEdit.frame5
  36.  
  37.   XFTmpltFrame .xfEdit.frame9 0
  38.  
  39.   if {!$xfConf(menuBarHidden)} {
  40.     # file menu
  41.     menubutton .xfEdit.frame1.fileMenu \
  42.       -text {}
  43.  
  44.     # config menu
  45.     menubutton .xfEdit.frame1.configMenu \
  46.       -text {}
  47.  
  48.     # edit menu
  49.     menubutton .xfEdit.frame1.editMenu \
  50.       -text {}
  51.  
  52.     # info menu
  53.     menubutton .xfEdit.frame1.infoMenu \
  54.       -text {}
  55.  
  56.     # misc menu
  57.     menubutton .xfEdit.frame1.miscMenu \
  58.       -text {}
  59.  
  60.     # options menu
  61.     menubutton .xfEdit.frame1.optionsMenu \
  62.       -text {}
  63.  
  64.     # add1 menu
  65.     menubutton .xfEdit.frame1.more1Menu \
  66.       -text {}
  67.  
  68.     # add2 menu
  69.     menubutton .xfEdit.frame1.more2Menu \
  70.       -text {}
  71.  
  72.     # add3 menu
  73.     menubutton .xfEdit.frame1.more3Menu \
  74.       -text {}
  75.  
  76.     # help menu
  77.     menubutton .xfEdit.frame1.helpMenu \
  78.       -text {}
  79.  
  80.     XFMenuBarInit $xfFile(menu) $xfPath(src)/xfdefmenubar.tcl
  81.   }
  82.  
  83.   if {!$xfConf(iconBarHidden)} {
  84.     XFIconBarInit $xfFile(iconbar) $xfPath(src)/xfdeficonbar.tcl $xfPath(icons)
  85.  
  86.     XFIconBarShow edit .xfEdit.frame10 $xfConf(iconBar)
  87.   }
  88.  
  89.   if {!$xfConf(editListsHidden)} {
  90.     # object lists
  91.     XFTmpltListbox .xfEdit.frame2 standard
  92.     .xfEdit.frame2.standard.standard configure \
  93.       -geometry 12x30
  94.  
  95.     label .xfEdit.frame2.standard.standardMess \
  96.       -relief raised \
  97.       -text {Standard}
  98.  
  99.     XFTmpltListbox .xfEdit.frame2 additional
  100.     .xfEdit.frame2.additional.additional configure \
  101.       -geometry 17x30
  102.  
  103.     label .xfEdit.frame2.additional.additionalMess \
  104.       -relief raised \
  105.       -text {Additional}
  106.  
  107.     XFTmpltListbox .xfEdit.frame2 template
  108.     .xfEdit.frame2.template.template configure \
  109.       -geometry 17x30
  110.  
  111.     label .xfEdit.frame2.template.templateDir \
  112.       -relief raised
  113.  
  114.     # type line
  115.     label .xfEdit.frame9.message2 \
  116.       -anchor w \
  117.       -relief raised \
  118.       -text "Current widget type:"
  119.   
  120.     label .xfEdit.frame9.currentType \
  121.       -anchor w \
  122.       -relief raised
  123.   }
  124.  
  125.   if {!$xfConf(statusHidden)} {
  126.     # status line
  127.     label .xfEdit.frame3.status \
  128.       -anchor w \
  129.       -relief raised
  130.   
  131.     label .xfEdit.frame3.cutPaste \
  132.       -anchor w \
  133.       -relief raised
  134.  
  135.     # set status line
  136.     set xfStatus(foreground) \
  137.       [lindex [.xfEdit.frame3.status configure -foreground] 4]
  138.     XFEditSetStatus {}
  139.  
  140.     # set cut buffer status
  141.     XFEditSetCutInfo  
  142.   }
  143.  
  144.   if {!$xfConf(pathNameHidden)} {
  145.     # path line
  146.     menubutton .xfEdit.frame4.showWindows \
  147.       -menu .xfEdit.frame4.showWindows.m \
  148.       -relief raised \
  149.       -text "Current widget path:"
  150.     menu .xfEdit.frame4.showWindows.m
  151.  
  152.     XFTmpltFrame .xfEdit.frame4.path
  153.   
  154.     # set path line
  155.     XFEditSetPath .
  156.  
  157.     # set window displaying
  158.     XFEditSetShowWindows
  159.   }
  160.   
  161.   if {!$xfConf(editListsHidden)} {
  162.     # the add buttons
  163.     button .xfEdit.frame5.addDefault \
  164.       -text {Add with defaults} \
  165.       -command {XFProcConfAddCurrentItem add}
  166.  
  167.     scale .xfEdit.frame5.addNumber \
  168.       -from 1 \
  169.       -to 50 \
  170.       -width 11 \
  171.       -sliderlength 20 \
  172.       -showvalue false \
  173.       -orient horizontal \
  174.       -label "Insert 1 item" \
  175.       -command "XFEditSetAddNumber"
  176.  
  177.     button .xfEdit.frame5.addConfigure \
  178.       -text {Configure and add} \
  179.       -command {XFProcConfAddCurrentItem config}
  180.   }
  181.  
  182.   if {!$xfConf(menuBarHidden)} {
  183.     # the standard widgets
  184.     catch "destroy .xfEdit.frame1.helpMenu.m.mStand"
  185.     if {"[info commands .xfEdit.frame1.helpMenu.m]" != ""} {
  186.       menu .xfEdit.frame1.helpMenu.m.mStand
  187.     }
  188.   }
  189.  
  190.   if {[XFMiscIsDir $xfPath(elements)]} {
  191.     foreach xfCounter [lsort [exec ls $xfPath(elements)]] {
  192.       if {[XFMiscIsFile $xfPath(elements)/$xfCounter] &&
  193.           "$xfCounter" != "Version" && "$xfCounter" != "Makefile" &&
  194.           "$xfCounter" != "Shapefile" && "$xfCounter" != "Dependencies"} {
  195.         if {$tkVersion >= 3.0} {
  196.           if {"$xfCounter" == "CheckButton" ||
  197.               "$xfCounter" == "RadioButton"} {
  198.             continue
  199.           }
  200.         } {
  201.           if {"$xfCounter" == "Checkbutton" ||
  202.               "$xfCounter" == "Radiobutton"} {
  203.             continue
  204.           }
  205.         }
  206.         lappend xfStatus(elementList) $xfCounter
  207.         if {!$xfConf(editListsHidden)} {
  208.           .xfEdit.frame2.standard.standard insert end $xfCounter
  209.         }
  210.  
  211.         if {!$xfConf(menuBarHidden)} {
  212.           foreach xfHelpElement [split $xfPath(helps) :] {
  213.             if {"[info commands .xfEdit.frame1.helpMenu.m.mStand]" != ""} {
  214.               if {[file exists $xfHelpElement/Tk/widgets/$xfCounter]} {
  215.                 .xfEdit.frame1.helpMenu.m.mStand add command \
  216.                   -label "$xfCounter" \
  217.                   -command "XFProcHelpHelp Tk widgets $xfCounter"
  218.                 break
  219.               } {
  220.                 if {[file exists $xfHelpElement/Tk/widgets/[string tolower $xfCounter]]} {
  221.                   .xfEdit.frame1.helpMenu.m.mStand add command \
  222.                     -label "$xfCounter" \
  223.                     -command "XFProcHelpHelp Tk widgets [string tolower $xfCounter]"
  224.                   break
  225.                 }
  226.               }
  227.             }
  228.           }
  229.         }
  230.       }
  231.     }
  232.   }
  233.  
  234.   if {!$xfConf(editListsHidden)} {
  235.     # set default type
  236.     XFEditSetType Frame 0
  237.     .xfEdit.frame2.standard.standard select from 4
  238.     .xfEdit.frame2.standard.standard select to 4
  239.   }
  240.  
  241.   # internal selection buffer (not mapped)
  242.   entry .xfEdit.curSelected -exportselection true
  243.   .xfEdit.curSelected delete 0 end
  244.   .xfEdit.curSelected insert 0 .
  245.   .xfEdit.curSelected select from 0
  246.   .xfEdit.curSelected select to end
  247.  
  248.   if {!$xfConf(menuBarHidden)} {
  249.     catch "destroy .xfEdit.frame1.helpMenu.m.mAdd"
  250.     if {"[info commands .xfEdit.frame1.helpMenu.m]" != ""} {
  251.       menu .xfEdit.frame1.helpMenu.m.mAdd
  252.     }
  253.   }
  254.  
  255.   foreach xfPathElement [split $xfPath(additionals) :] {
  256.     if {[XFMiscIsDir $xfPathElement]} {
  257.       foreach xfCounter [exec ls $xfPathElement] {
  258.         if {[XFMiscIsFile $xfPathElement/$xfCounter] &&
  259.             "$xfCounter" != "Version" && "$xfCounter" != "Makefile" &&
  260.             "$xfCounter" != "Shapefile" && "$xfCounter" != "Dependencies" &&
  261.             ("[info commands $xfCounter]" != "" ||
  262.              "[info commands [string tolower $xfCounter]]" != "" ||
  263.              ([lsearch $xfWrongName "$xfCounter*"] != -1 &&
  264.               "[info commands [lindex [lindex $xfWrongName [lsearch $xfWrongName $xfCounter*]] 1]]" != ""))} {
  265.           set xfTmpFileList($xfCounter) ""
  266.         }
  267.       }
  268.     }
  269.   }
  270.   if {[info exists xfTmpFileList]} {
  271.     foreach xfCounter [lsort [array names xfTmpFileList]] {
  272.       lappend xfStatus(additionalList) $xfCounter
  273.       if {!$xfConf(editListsHidden)} {
  274.         .xfEdit.frame2.additional.additional insert end $xfCounter
  275.       }
  276.  
  277.       if {!$xfConf(menuBarHidden)} {
  278.         foreach xfHelpElement [split $xfPath(helps) :] {
  279.           if {"[info commands .xfEdit.frame1.helpMenu.m.mAdd]" != ""} {
  280.             if {[file exists $xfHelpElement/Tk/widgets/$xfCounter]} {
  281.              .xfEdit.frame1.helpMenu.m.mAdd add command \
  282.                 -label "$xfCounter" \
  283.                 -command "XFProcHelpHelp Tk widgets $xfCounter"
  284.               break
  285.             } {
  286.               if {[file exists $xfHelpElement/Tk/widgets/[string tolower $xfCounter]]} {
  287.                .xfEdit.frame1.helpMenu.m.mAdd add command \
  288.                  -label "$xfCounter" \
  289.                  -command "XFProcHelpHelp Tk widgets [string tolower $xfCounter]"
  290.                 break
  291.               }
  292.             }
  293.           }
  294.         }
  295.       }
  296.     }
  297.   }
  298.  
  299.   if {!$xfConf(editListsHidden) && !$xfConf(statusHidden)} {
  300.     set xfStatus(tmpltPath) ""
  301.     .xfEdit.frame2.template.templateDir configure \
  302.       -text "Templates"
  303.     XFEditReadTemplates $xfStatus(tmpltPath)
  304.   }
  305.  
  306.   if {!$xfConf(menuBarHidden)} {
  307.     # init menus
  308.     if {$tkVersion >= 3.0} {
  309.       tk_menuBar .xfEdit.frame1 \
  310.         .xfEdit.frame1.fileMenu \
  311.         .xfEdit.frame1.configMenu \
  312.         .xfEdit.frame1.editMenu \
  313.         .xfEdit.frame1.infoMenu \
  314.         .xfEdit.frame1.miscMenu \
  315.         .xfEdit.frame1.optionsMenu \
  316.         .xfEdit.frame1.helpMenu
  317.     } {
  318.       tk_menus .xfEdit \
  319.         .xfEdit.frame1.fileMenu \
  320.         .xfEdit.frame1.configMenu \
  321.         .xfEdit.frame1.editMenu \
  322.         .xfEdit.frame1.infoMenu \
  323.         .xfEdit.frame1.miscMenu \
  324.         .xfEdit.frame1.optionsMenu \
  325.         .xfEdit.frame1.helpMenu
  326.     }
  327.   }
  328.  
  329.   if {!$xfConf(editListsHidden)} {
  330.     # bindings
  331.     bind .xfEdit.frame2.standard.standard $xfBind(select1) {
  332.       XFBindSelectOne %W %y
  333.       .xfEdit.frame2.additional.additional select clear
  334.       .xfEdit.frame2.template.template select clear
  335.       XFEditSetType [%W get [%W nearest %y]] 0
  336.       XFProcConfAddCurrentItem add}
  337.     bind .xfEdit.frame2.standard.standard $xfBind(select2) {
  338.       global xfConf
  339.       XFBindSelectOne %W %y
  340.       .xfEdit.frame2.additional.additional select clear
  341.       .xfEdit.frame2.template.template select clear
  342.       XFEditSetType [%W get [%W nearest %y]] 0
  343.       set xfTmpValue $xfConf(getWidgetName)
  344.       set xfConf(getWidgetName) 0
  345.       XFProcConfAddCurrentItem add
  346.       set xfConf(getWidgetName) $xfTmpValue}
  347.     bind .xfEdit.frame2.standard.standard $xfBind(select3) {
  348.       XFBindSelectOne %W %y
  349.       .xfEdit.frame2.additional.additional select clear
  350.       .xfEdit.frame2.template.template select clear
  351.       XFEditSetType [%W get [%W nearest %y]] 0
  352.       XFProcConfAddCurrentItem config}
  353.     bind .xfEdit.frame2.standard.standard <ButtonPress-1> {
  354.       XFBindSelectOne %W %y
  355.       .xfEdit.frame2.additional.additional select clear
  356.       .xfEdit.frame2.template.template select clear
  357.       XFEditSetType [%W get [%W nearest %y]] 0}
  358.     bind .xfEdit.frame2.standard.standard <Button1-Motion> {
  359.       XFBindSelectOne %W %y
  360.       .xfEdit.frame2.additional.additional select clear
  361.       .xfEdit.frame2.template.template select clear
  362.       XFEditSetType [%W get [%W nearest %y]] 0} 
  363.     bind .xfEdit.frame2.standard.standard <Shift-ButtonPress-1> {
  364.       XFBindSelectOne %W %y
  365.       .xfEdit.frame2.additional.additional select clear
  366.       .xfEdit.frame2.template.template select clear
  367.       XFEditSetType [%W get [%W nearest %y]] 0}
  368.     bind .xfEdit.frame2.standard.standard <Shift-Button1-Motion> {
  369.       XFBindSelectOne %W %y
  370.       .xfEdit.frame2.additional.additional select clear
  371.       .xfEdit.frame2.template.template select clear
  372.       XFEditSetType [%W get [%W nearest %y]] 0}
  373.  
  374.     bind .xfEdit.frame2.additional.additional $xfBind(select1) {
  375.       XFBindSelectOne %W %y
  376.       .xfEdit.frame2.standard.standard select clear
  377.       .xfEdit.frame2.template.template select clear
  378.       XFEditSetType [%W get [%W nearest %y]] 1
  379.       XFProcConfAddCurrentItem add}
  380.     bind .xfEdit.frame2.additional.additional $xfBind(select3) {
  381.       XFBindSelectOne %W %y
  382.       .xfEdit.frame2.standard.standard select clear
  383.       .xfEdit.frame2.template.template select clear
  384.       XFEditSetType [%W get [%W nearest %y]] 1
  385.       XFProcConfAddCurrentItem config}
  386.     bind .xfEdit.frame2.additional.additional <ButtonPress-1> {
  387.       XFBindSelectOne %W %y
  388.       .xfEdit.frame2.standard.standard select clear
  389.       .xfEdit.frame2.template.template select clear
  390.       XFEditSetType [%W get [%W nearest %y]] 1}
  391.     bind .xfEdit.frame2.additional.additional <Button1-Motion> {
  392.       XFBindSelectOne %W %y
  393.       .xfEdit.frame2.standard.standard select clear
  394.       .xfEdit.frame2.template.template select clear
  395.       XFEditSetType [%W get [%W nearest %y]] 1}
  396.     bind .xfEdit.frame2.additional.additional <Shift-ButtonPress-1> {
  397.       XFBindSelectOne %W %y
  398.       .xfEdit.frame2.standard.standard select clear
  399.       .xfEdit.frame2.template.template select clear
  400.       XFEditSetType [%W get [%W nearest %y]] 1}
  401.     bind .xfEdit.frame2.additional.additional <Shift-Button1-Motion> {
  402.       XFBindSelectOne %W %y
  403.       .xfEdit.frame2.standard.standard select clear
  404.       .xfEdit.frame2.template.template select clear
  405.       XFEditSetType [%W get [%W nearest %y]] 1}
  406.  
  407.     bind .xfEdit.frame2.template.template $xfBind(select1) {
  408.       XFBindSelectOne %W %y
  409.       .xfEdit.frame2.standard.standard select clear
  410.       .xfEdit.frame2.additional.additional select clear
  411.       XFEditSetType [%W get [%W nearest %y]] 2
  412.       XFProcConfAddCurrentItem add}
  413.     bind .xfEdit.frame2.template.template $xfBind(select3) {
  414.       XFBindSelectOne %W %y
  415.       .xfEdit.frame2.standard.standard select clear
  416.       .xfEdit.frame2.additional.additional select clear
  417.       XFEditSetType [%W get [%W nearest %y]] 2
  418.       XFProcConfAddCurrentItem add}
  419.     bind .xfEdit.frame2.template.template <ButtonPress-1> {
  420.       XFBindSelectOne %W %y
  421.       .xfEdit.frame2.standard.standard select clear
  422.       .xfEdit.frame2.additional.additional select clear
  423.       XFEditSetType [%W get [%W nearest %y]] 2}
  424.     bind .xfEdit.frame2.template.template <Button1-Motion> {
  425.       XFBindSelectOne %W %y
  426.       .xfEdit.frame2.standard.standard select clear
  427.       .xfEdit.frame2.additional.additional select clear
  428.       XFEditSetType [%W get [%W nearest %y]] 2}
  429.     bind .xfEdit.frame2.template.template <Shift-ButtonPress-1> {
  430.       XFBindSelectOne %W %y
  431.       .xfEdit.frame2.standard.standard select clear
  432.       .xfEdit.frame2.additional.additional select clear
  433.       XFEditSetType [%W get [%W nearest %y]] 2}
  434.     bind .xfEdit.frame2.template.template <Shift-Button1-Motion> {
  435.       XFBindSelectOne %W %y
  436.       .xfEdit.frame2.standard.standard select clear
  437.       .xfEdit.frame2.additional.additional select clear
  438.       XFEditSetType [%W get [%W nearest %y]] 2}
  439.   }
  440.  
  441.   # packing
  442.   if {!$xfConf(menuBarHidden)} {
  443.     pack append .xfEdit.frame1 \
  444.                 .xfEdit.frame1.fileMenu {left} \
  445.                 .xfEdit.frame1.configMenu {left} \
  446.                 .xfEdit.frame1.editMenu {left} \
  447.                 .xfEdit.frame1.infoMenu {left} \
  448.                 .xfEdit.frame1.miscMenu {left} \
  449.                 .xfEdit.frame1.optionsMenu {left} \
  450.                 .xfEdit.frame1.helpMenu {right}
  451.   }
  452.   if {!$xfConf(editListsHidden)} {
  453.     pack before .xfEdit.frame2.standard.vscroll \
  454.                 .xfEdit.frame2.standard.standardMess {top fillx}
  455.     pack before .xfEdit.frame2.additional.vscroll \
  456.                 .xfEdit.frame2.additional.additionalMess {top fillx}
  457.     pack before .xfEdit.frame2.template.vscroll \
  458.                 .xfEdit.frame2.template.templateDir {top fillx}
  459.     pack append .xfEdit.frame2 \
  460.                 .xfEdit.frame2.standard {left fill} \
  461.                 .xfEdit.frame2.additional {left fill} \
  462.                 .xfEdit.frame2.template {left fill expand}
  463.     pack append .xfEdit.frame5 \
  464.                 .xfEdit.frame5.addDefault {left expand padx 10 pady 10} \
  465.                 .xfEdit.frame5.addNumber {left expand padx 10 pady 10} \
  466.                 .xfEdit.frame5.addConfigure {left expand padx 10 pady 10}
  467.     pack append .xfEdit.frame9 \
  468.                 .xfEdit.frame9.message2 {left} \
  469.                 .xfEdit.frame9.currentType {left expand fill}
  470.   }
  471.   if {!$xfConf(statusHidden)} {
  472.     pack append .xfEdit.frame3 \
  473.                 .xfEdit.frame3.cutPaste {right} \
  474.                 .xfEdit.frame3.status {left expand fill}
  475.   }
  476.   if {!$xfConf(pathNameHidden)} {
  477.     pack append .xfEdit.frame4 \
  478.                 .xfEdit.frame4.showWindows {left} \
  479.                 .xfEdit.frame4.path {left expand fill}
  480.   }
  481.   pack append .xfEdit \
  482.               .xfEdit.frame1 {top fill} \
  483.               .xfEdit.frame10 {top fill} \
  484.               .xfEdit.frame3 {top fill} \
  485.               .xfEdit.frame4 {top fill} \
  486.               .xfEdit.frame5 {bottom fill} \
  487.               .xfEdit.frame9 {bottom fill} \
  488.               .xfEdit.frame2 {top expand fill}
  489. }
  490.  
  491. ##########
  492. # Procedure: XFEditInsertTmplt
  493. # Description: select and insert a template when double clicked
  494. # Arguments: xfName - the name of the selected template
  495. # Returns: none
  496. # Sideeffects: none
  497. ##########
  498. proc XFEditInsertTmplt {xfName} {
  499.   global xfPath
  500.   global xfStatus
  501.  
  502.   set xfTmpEntry $xfName
  503.   # one directory up
  504.   if {"$xfTmpEntry" == "../"} {
  505.     set xfTmpEntry [string range $xfStatus(tmpltPath) 0 \
  506.           [expr [string length $xfStatus(tmpltPath)]-2]]
  507.     if {[string last "/" $xfTmpEntry] <= 0} {
  508.       set xfStatus(tmpltPath) ""
  509.     } {
  510.       set xfStatus(tmpltPath) [string range $xfTmpEntry 0 \
  511.             [expr [string last "/" $xfTmpEntry]-1]]
  512.     }
  513.     if {"$xfStatus(tmpltPath)" == ""} {
  514.       .xfEdit.frame2.template.templateDir configure -text \
  515.         "Templates"
  516.     } {
  517.       .xfEdit.frame2.template.templateDir configure -text \
  518.         .../[file tail $xfStatus(tmpltPath)]
  519.     }
  520.     XFEditReadTemplates $xfStatus(tmpltPath)
  521.   } {
  522.     set xfIsDir 0
  523.     set xfIsExec 0
  524.     if {"[string index $xfTmpEntry \
  525.           [expr [string length $xfTmpEntry]-1]]" == "/" ||
  526.         "[string index $xfTmpEntry \
  527.           [expr [string length $xfTmpEntry]-1]]" == "@"} {
  528.       set xfFileName [string range $xfTmpEntry 0 \
  529.             [expr [string length $xfTmpEntry]-2]]
  530.       foreach xfPathElement [split $xfPath(templates) :] {
  531.         if {[XFMiscIsDir $xfPathElement/$xfStatus(tmpltPath)/$xfFileName]} {
  532.           set xfIsDir 1
  533.           break
  534.         }
  535.       }
  536.       if {!$xfIsDir} {
  537.         set xfFileName $xfTmpEntry
  538.       }
  539.     } {
  540.       if {"[string index $xfTmpEntry \
  541.             [expr [string length $xfTmpEntry]-1]]" == "*"} {
  542.         set xfFileName [string range $xfTmpEntry 0 \
  543.               [expr [string length $xfTmpEntry]-2]]
  544.         foreach xfPathElement [split $xfPath(templates) :] {
  545.           if {[file executable $xfPathElement/$xfStatus(tmpltPath)/$xfFileName]} {
  546.             set xfIsExec 1
  547.             break
  548.           }
  549.         }
  550.         if {!$xfIsEcec} {
  551.           set xfFileName $xfTmpEntry
  552.         }
  553.       } {
  554.         set xfFileName $xfTmpEntry
  555.         foreach xfPathElement [split $xfPath(templates) :] {
  556.           if {[file exists $xfPathElement/$xfStatus(tmpltPath)/$xfFileName.t]} {
  557.             break
  558.           }
  559.         }
  560.       }
  561.     }
  562.     if {$xfIsDir} {
  563.       if {"$xfStatus(tmpltPath)" == "" ||
  564.           "$xfStatus(tmpltPath)" == "/"} {
  565.         append xfStatus(tmpltPath) $xfFileName
  566.       } {
  567.         append xfStatus(tmpltPath) / $xfFileName
  568.       }
  569.       .xfEdit.frame2.template.templateDir configure \
  570.         -text .../$xfFileName
  571.       XFEditReadTemplates $xfStatus(tmpltPath)
  572.     } {
  573.       XFEditSetStatus "Inserting template $xfFileName..."
  574.       XFPasteFile $xfStatus(path) $xfPathElement/$xfStatus(tmpltPath)/$xfFileName.t
  575.       XFEditSetStatus "Inserting template $xfFileName...done"
  576.     }
  577.   }
  578. }
  579.  
  580. ##########
  581. # Procedure: XFEditMakeDestroy
  582. # Description: create a DestroyWindow procedure
  583. # Arguments: xfW - the widget to destroy
  584. # Returns: none
  585. # Sideeffects: a new procedure named DestroyWindow... is created
  586. ##########
  587. proc XFEditMakeDestroy {xfW} {
  588.  
  589.   catch "proc DestroyWindow$xfW {} {# xf ignore me 7
  590.     if {\"\[info procs XFEdit\]\" != \"\"} {
  591.       if {\"\[info commands $xfW\]\" != \"\"} {
  592.         global xfShowWindow$xfW
  593.         set xfShowWindow$xfW 0
  594.         XFEditSetPath .
  595.         after 2 \"XFSaveAsProc $xfW; XFEditSetShowWindows\"
  596.       }
  597.     } {
  598.       catch \"destroy $xfW\"
  599.       update
  600.     }
  601.   }"
  602. }
  603.  
  604. ##########
  605. # Procedure: XFEditReadTemplates
  606. # Description: read the current template directory
  607. # Arguments: xfCurrentPath - the current template directory
  608. # Returns: none
  609. # Sideeffects: none
  610. ##########
  611. proc XFEditReadTemplates {xfCurrentPath} {
  612.   global xfPath
  613.   global xfStatus
  614.  
  615.   XFMiscClearList .xfEdit.frame2.template.template
  616.   # add a ..
  617.   if {"$xfCurrentPath" != "" && "$xfCurrentPath" != "/"} {
  618.     .xfEdit.frame2.template.template insert end "../"
  619.   }
  620.   # walk through directory list
  621.   foreach xfPathElement [split $xfPath(templates) :] {
  622.     if {[file exists $xfPathElement/$xfCurrentPath]} {
  623.       foreach xfCounter [exec ls -F $xfPathElement/$xfCurrentPath] {
  624.         if {("[string index $xfCounter \
  625.                [expr [string length $xfCounter]-1]]" == "/" ||
  626.              "[string index $xfCounter \
  627.                [expr [string length $xfCounter]-1]]" == "@") &&
  628.             [XFMiscIsDir $xfPathElement/$xfCurrentPath/[string range \
  629.               $xfCounter 0 [expr [string length $xfCounter]-2]]]} {
  630.           if {"AtFS/" != "$xfCounter" && "RCS/" != "$xfCounter" &&
  631.               "AtFS@" != "$xfCounter" && "RCS@" != "$xfCounter"} {
  632.             set tmpFileList($xfCounter) ""
  633.           }
  634.         } {
  635.           if {[string match "*.t" $xfCounter] ||
  636.               [string match "*.t@" $xfCounter]} {
  637.             set tmpFileList([file rootname $xfCounter]) ""
  638.           }
  639.         }
  640.       }
  641.     }
  642.   }
  643.   if {[info exists tmpFileList]} {
  644.     foreach xfCounter [lsort [array names tmpFileList]] {
  645.       .xfEdit.frame2.template.template insert end $xfCounter
  646.     }
  647.   }
  648. }
  649.  
  650. ##########
  651. # Procedure: XFEditSetAddNumber
  652. # Description: set the number of widgets to insert
  653. # Arguments: xfNewValue - the new position of the scale
  654. # Returns: none
  655. # Sideeffects: none
  656. ##########
  657. proc XFEditSetAddNumber {xfNewValue} {
  658.  
  659.   if {$xfNewValue == 1} {
  660.     .xfEdit.frame5.addNumber configure -label \
  661.       "Insert 1 item"
  662.   } {
  663.     .xfEdit.frame5.addNumber configure -label \
  664.       "Insert $xfNewValue items"
  665.   }
  666. }
  667.  
  668. ##########
  669. # Procedure: XFEditSetCutInfo
  670. # Description: set the cutbuffer info field
  671. # Arguments: none
  672. # Returns: none
  673. # Sideeffects: none
  674. ##########
  675. proc XFEditSetCutInfo {} {
  676.   global xfStatus
  677.  
  678.   if {"[info commands .xfEdit.frame3.cutPaste]" == ""} {
  679.     return
  680.   }
  681.   if {$xfStatus(cutBuffer)} {
  682.     .xfEdit.frame3.cutPaste configure \
  683.       -text "not empty"
  684.   } {
  685.     .xfEdit.frame3.cutPaste configure \
  686.       -text "    empty"
  687.   }
  688. }
  689.  
  690. ##########
  691. # Procedure: XFEditSetPath
  692. # Description: set the window path
  693. # Arguments: xfW - the new path
  694. # Returns: none
  695. # Sideeffects: none
  696. ##########
  697. proc XFEditSetPath {xfW} {
  698.   global xfConf
  699.   global xfMisc
  700.   global xfStatus
  701.  
  702.   set xfCurrentItem ""
  703.   set xfItemCounter 1
  704.   set xfOldPosition 1
  705.   set xfPathLength [string length $xfW]
  706.   set xfPosition 1
  707.  
  708.   if {"[info commands .xfEdit.frame4.path]" == ""} {
  709.     if {![string match ".xf*" $xfW] &&
  710.         ![string match "xf*" [winfo name $xfW]]} {
  711.       set xfStatus(path) $xfW
  712.     }
  713.     return
  714.   }
  715.  
  716.   foreach xfCounter [winfo children .xfEdit.frame4.path] {
  717.     destroy $xfCounter
  718.   }
  719.  
  720.   # the root
  721.   menubutton .xfEdit.frame4.path.pathMenu0 \
  722.     -borderwidth 0 \
  723.     -text {.} \
  724.     -menu ".xfEdit.frame4.path.pathMenu0.m"
  725.  
  726.   menu .xfEdit.frame4.path.pathMenu0.m
  727.   .xfEdit.frame4.path.pathMenu0.m add command \
  728.     -label "." \
  729.     -command "XFEditSetPath .; XFMiscFlash ."
  730.  
  731.   foreach xfCounter [winfo children .] {
  732.     if {![string match ".xf*" $xfCounter] &&
  733.         ![string match "xf*" [winfo name $xfCounter]]} {
  734.       .xfEdit.frame4.path.pathMenu0.m add command \
  735.         -label "[string range $xfCounter 1 \
  736.                   [expr [string length $xfCounter]-1]]" \
  737.         -command "XFEditSetPath $xfCounter; XFMiscFlash $xfCounter"
  738.     }
  739.   }
  740.  
  741.   if {$xfPosition == $xfPathLength} {
  742.     set xfStatus(path) $xfW
  743.   }
  744.   while {$xfPosition < $xfPathLength} {
  745.     while {$xfPosition < $xfPathLength} {
  746.       set xfCurrent [string index $xfW $xfPosition]
  747.       if {[string match $xfCurrent "."] &&
  748.           ![string match $xfCurrent "\*"]} {
  749.         break
  750.       }
  751.       incr xfPosition 1
  752.     }
  753.     if {![string match ".xf*" $xfStatus(path)]} {
  754.       set xfStatus(path) [string range $xfW 0 [expr $xfPosition-1]]
  755.       set xfCurrentItem [string range $xfW $xfOldPosition [expr $xfPosition-1]]
  756.       if {![string match "xf*" $xfCurrentItem]} {
  757.         button .xfEdit.frame4.path.pathLabel$xfItemCounter \
  758.           -borderwidth 0 \
  759.           -relief flat \
  760.           -text "$xfCurrentItem" \
  761.           -command "
  762.             XFEditSetPath $xfStatus(path)
  763.             XFMiscFlash $xfStatus(path)"
  764.  
  765.         menubutton .xfEdit.frame4.path.pathMenu$xfItemCounter \
  766.           -borderwidth 0 \
  767.           -text {.} \
  768.           -menu ".xfEdit.frame4.path.pathMenu$xfItemCounter.m"
  769.  
  770.         menu .xfEdit.frame4.path.pathMenu$xfItemCounter.m
  771.         foreach xfChildren [winfo children $xfStatus(path)] {
  772.           if {![string match "xf*" [winfo name $xfChildren]]} {
  773.             .xfEdit.frame4.path.pathMenu$xfItemCounter.m add command \
  774.               -label "[string range $xfChildren [expr $xfPosition+1] \
  775.                         [expr [string length $xfChildren]-1]]" \
  776.               -command "XFEditSetPath $xfChildren; XFMiscFlash $xfChildren"
  777.           }
  778.         }
  779.         incr xfItemCounter
  780.       }
  781.     }
  782.     incr xfPosition
  783.     set xfOldPosition $xfPosition
  784.   }
  785.  
  786.   set xfCounter 0
  787.   while {$xfCounter < $xfItemCounter} {
  788.     if {$xfCounter > 0} {
  789.       pack append .xfEdit.frame4.path \
  790.         .xfEdit.frame4.path.pathLabel$xfCounter {left}
  791.     }
  792.     pack append .xfEdit.frame4.path \
  793.       .xfEdit.frame4.path.pathMenu$xfCounter {left}
  794.     incr xfCounter 1
  795.   }
  796.   
  797.   if {$xfConf(scanTree) && "[info commands .xfParameters]" != ""} {
  798.     XFMiscReadTree . .xfParameters.frame2.widgets.widgets all 1"
  799.   }
  800.   if {$xfConf(scanTree) && "[info commands .xfGroups]" != ""} {
  801.     XFMiscReadTree . .xfGroups.frame2.widgets.widgets all 1"
  802.   }
  803.   if {$xfConf(scanTree) && "[info commands .xfInfoWidgetTree]" != ""} {
  804.     XFInfoWidgetTreeRead $xfMisc(widgetTreeRoot) 10 10
  805.   }
  806. }
  807.  
  808. ##########
  809. # Procedure: XFEditSetShowWindows
  810. # Description: set the window displaying menu
  811. # Arguments: none
  812. # Returns: none
  813. # Sideeffects: none
  814. ##########
  815. proc XFEditSetShowWindows {} {
  816.  
  817.   if {"[info commands .xfEdit.frame4.showWindows]" == ""} {
  818.     return
  819.   }
  820.   # clear menu
  821.   XFMiscDeleteMenuChilds .xfEdit.frame4.showWindows.m
  822.  
  823.   # clear the window procedures, and variables
  824.   foreach xfCounter [info globals xfShowWindow.*] {
  825.     global $xfCounter
  826.     if {[set $xfCounter]} {
  827.       unset $xfCounter
  828.       if {"[info proc ShowWindow.[string range $xfCounter 13 end]]" != ""} {
  829.         rename ShowWindow.[string range $xfCounter 13 end] {}
  830.       }
  831.     }
  832.     if {"[info proc DestroyWindow.[string range $xfCounter 13 end]]" != ""} {
  833.       rename DestroyWindow.[string range $xfCounter 13 end] {}
  834.     }
  835.   }
  836.  
  837.   # append all displayed toplevels
  838.   foreach xfCounter [winfo children .] {
  839.     if {"[winfo class $xfCounter]" == "Toplevel"} {
  840.       if {![string match ".xf*" $xfCounter] &&
  841.           ![string match "xf*" [winfo name $xfCounter]]} {
  842.         global xfShowWindow$xfCounter
  843.         set xfShowWindow$xfCounter 1
  844.         catch "proc ShowWindow$xfCounter {args} {# xf ignore me 7}"
  845.         .xfEdit.frame4.showWindows.m add checkbutton \
  846.           -label "[string range $xfCounter 1 \
  847.                     [expr [string length $xfCounter]-1]]" \
  848.           -offvalue 0 \
  849.           -onvalue 1 \
  850.           -variable xfShowWindow$xfCounter \
  851.           -command "
  852.             after 2 \"catch \{XFMiscToplevelRemove $xfCounter\}\""
  853.         XFEditMakeDestroy $xfCounter
  854.       }
  855.     }
  856.   }
  857.  
  858.   # append all hidden toplevels
  859.   foreach xfCounter [info globals xfShowWindow.*] {
  860.     global $xfCounter
  861.     if {![set $xfCounter]} {
  862.       set $xfCounter 0
  863.       .xfEdit.frame4.showWindows.m add checkbutton \
  864.         -label "[string range $xfCounter 13 \
  865.                   [expr [string length $xfCounter]-1]]" \
  866.         -offvalue 0 \
  867.         -onvalue 1 \
  868.         -variable $xfCounter \
  869.         -command "
  870.           after 2 \"catch \{XFMiscToplevelShow [string range $xfCounter 13 \
  871.             [expr [string length $xfCounter]-1]]\}\""
  872.       XFEditMakeDestroy .[string range $xfCounter 13 \
  873.                           [expr [string length $xfCounter]-1]]
  874.     }
  875.   }
  876. }
  877.  
  878. ##########
  879. # Procedure: XFEditSetStatus
  880. # Description: set the status line
  881. # Arguments: xfNewStatus - new contents of the status line
  882. # Returns: none
  883. # Sideeffects: none
  884. ##########
  885. proc XFEditSetStatus {xfNewStatus} {
  886.   global xfConf
  887.   global xfStatus
  888.  
  889.   if {"[info commands .xfEdit.frame3.status]" != ""} {
  890.     if {$xfStatus(hasColor)} {
  891.       if {[regexp {\.\.\.$} $xfNewStatus] ||
  892.           [regexp {\.\.\.in progress$} $xfNewStatus]} {
  893.         .xfEdit.frame3.status configure \
  894.           -foreground $xfConf(flash)
  895.       } {
  896.         .xfEdit.frame3.status configure \
  897.           -foreground $xfStatus(foreground)
  898.       }
  899.     }
  900.     .xfEdit.frame3.status configure \
  901.       -text $xfNewStatus
  902.   }
  903.   update
  904.   flush stdout
  905.   flush stderr
  906. }
  907.  
  908. ##########
  909. # Procedure: XFEditSetType
  910. # Description: set the type field
  911. # Arguments: xfType - the new type
  912. #            xfListNum - the current list
  913. # Returns: none
  914. # Sideeffects: none
  915. ##########
  916. proc XFEditSetType {xfNewType xfListNum} {
  917.   global xfStatus
  918.  
  919.   set xfStatus(itemList) $xfListNum
  920.   set xfStatus(type) $xfNewType
  921.  
  922.   if {"[info commands .xfEdit.frame9.currentType]" == ""} {
  923.     return
  924.   }
  925.   .xfEdit.frame9.currentType configure \
  926.     -text $xfNewType
  927.   update
  928. }
  929.  
  930. # eof
  931.  
  932.